package 动态规划9月;

import java.util.Scanner;

/*
牛牛现在有一个n个数组成的数列,牛牛现在想取一个连续的子序列,并且这个子序列还必须得满足:最多只改变一个数,就可以使得这个连续的子序列是一个严格上升的子序列,牛牛想知道这个连续子序列最长的长度是多少。
输入描述:
输入包括两行,第一行包括一个整数n(1 ≤ n ≤ 10^5),即数列的长度;
第二行n个整数a_i, 表示数列中的每个数(1 ≤ a_i ≤ 10^9),以空格分割。
输出描述:
输出一个整数,表示最长的长度。
输入例子:
6
7 2 3 1 5 6
输出例子:
5
————————————————
版权声明：本文为CSDN博主「若即若离ing」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/wwe4023/article/details/72770342
https://www.nowcoder.com/test/question/done?tid=48226335&qid=100451#summary
 */
public class Main3 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int n = Integer.parseInt(in.nextLine());

        String[] cmd = in.nextLine().split(" ");
        int[] arr = new int[n];
        for (int i = 0; i < arr.length; i++)
            arr[i] = Integer.parseInt(cmd[i]);

        System.out.println(longestSubSeq(arr));
    }
    public static int longestSubSeq(int[] arr) {
        int[] left = new int[arr.length];
        int[] right = new int[arr.length];
        left[0]=1;
        for (int i = 1; i < arr.length; i++) {
            if(arr[i] > arr[i-1])
                left[i] = left[i-1]+1;
            else
                left[i] = 1;
        }
        right[arr.length-1] = 1;
        for (int i = right.length-2; i >=0 ; i--) {
            if(arr[i] < arr[i+1])
                right[i] = right[i+1]+1;
            else
                right[i] = 1;
        }
        int max = 0;
        for (int i = 1; i < arr.length-1; i++) {
            int a = left[i-1];
            int b = right[i+1];
            if(arr[i-1] < arr[i+1] && a+b > max)
                max = a+b;
        }

        return max+1;
    }


}
